package com.android.common.utils;

import java.text.DateFormat;
import java.text.ParseException;
import java.util.Calendar;
import java.util.Date;

/**
 * 日期时间工具类
 *
 * @author Administrator
 */
public class DateUtil {

    /**
     * 格式化日期时间的通用方法
     * @param format 格式：yyyy-MM-dd HH:mm:ss
     * @param dateTime 将要被格式化的日期时间
     * @return 返回格式后的字符串
     */
    public static String formatDateTime(DateFormat format, long dateTime) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTimeInMillis(dateTime);
        return format.format(calendar.getTime());
    }
    /**
     * 格式化日期时间通用方法
     * @param format 格式：yyyy-MM-dd HH:mm:ss
     * @param dateTime 将要被格式化的日期时间
     * @return 返回格式后的字符串
     */
    public static String formatDateTime(DateFormat format, String dateTime) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTimeInMillis(Long.parseLong(dateTime));
        return format.format(calendar.getTime());
    }

    /**
     * 格式化当前日期
     * @param format 格式：yyyy-MM-dd HH:mm:ss
     * @return 返回格式后的字符串
     */
    public static String formatCurrentTime(DateFormat format) {
        return formatDateTime(format,System.currentTimeMillis());
    }

    /**
     * 解析格式化的日期时间得到Date
     * @param format 格式：yyyy-MM-dd HH:mm:ss
     * @return 返回解析后的日期
     */
    public static Date parseDateTime2Date(DateFormat format, String dateTime) {
        Date result;
        try {
            result = format.parse(dateTime);
        }catch (ParseException parseException){
            result = Calendar.getInstance().getTime();
            parseException.printStackTrace();
        }
        return result;
    }

    /**
     * 解析格式化的日期时间得到Calendar
     * @param format 格式：yyyy-MM-dd HH:mm:ss
     * @return 返回解析后的日历
     */
    public static Calendar parseDateTime2Calendar(DateFormat format, String dateTime) {
        Date date = parseDateTime2Date(format,dateTime);
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        return calendar;
    }

    /**
     * 将时间戳转为代表"距现在多久之前"的字符串
     *
     * @param timeStr 时间戳
     * @return
     */
    public static String getStandardDate(String timeStr) {

        StringBuffer sb = new StringBuffer();

        long t = Long.parseLong(timeStr);
        long time = System.currentTimeMillis() - t;
        long mill = (long) Math.floor(time / 1000);//秒前

        long minute = (long) Math.floor(time / 60 / 1000.0f);// 分钟前

        long hour = (long) Math.floor(time / 60 / 60 / 1000.0f);// 小时

        long day = (long) Math.floor(time / 24 / 60 / 60 / 1000.0f);// 天前

        if (day > 1) {
            sb.append(day + "天");
        } else if (hour - 1 > 0) {
            if (hour >= 24) {
                sb.append("1天");
            } else {
                sb.append(hour + "小时");
            }
        } else if (minute - 1 > 0) {
            if (minute == 60) {
                sb.append("1小时");
            } else {
                sb.append(minute + "分钟");
            }
        } else if (mill - 1 > 0) {
            if (mill == 60) {
                sb.append("1分钟");
            } else {
                sb.append(mill + "秒");
            }
        } else {
            sb.append("刚刚");
        }
        if (!sb.toString().equals("刚刚")) {
            sb.append("前");
        }
        return sb.toString();
    }

}